package org.example.visitor;

/**
 * 访问者重点是"访问"而不去改对象的结构!!!!!!
 * 访问者模式的作用是将数据结构和和数据操作分开,代码这里product就是数据结构,对product的操作我们放到
 * visitor去操作,这样就将数据结构和数据操作分开了,而且
 * 通俗点讲就是作为访问者A我想让O对象给我提供a'服务,访问者B想让O对象提供b'服务,
 * 正常写法不管从0对象或者访问者来写都要if-else判断
 * 访问者模式则避免这种写法,但是违反了迪米特法则,因为访问者知道太多O对象的细节.
 *
 *
 * 一句话,你如果在一个集合里面,代码不变化,然后随着访问者的不同输出不同的内容你就可以考虑访问者模式!!
 *
 */
public class TestVisitor {
    public static void main(String[] args) {
        SuperMarket superMarket = new SuperMarket();
        System.out.println("=======visitor visit price=======");
        superMarket.accept(new PriceVisitor());
        System.out.println("=======visitor visit color=======");
        superMarket.accept(new ColorVisitor());
    }
}
